﻿function handleError(msg){
    art.tip.danger(msg);
    //alert(msg)
}
function initFileGroup(swfu){
    fg_fileSizes[swfu.settings.upload_type] = fg_fileSizes[swfu.settings.upload_type] || 0;
    fg_uploads[swfu.settings.upload_type] = fg_uploads[swfu.settings.upload_type] || 0;
}

function fileQueued(file)
{
    var swfu = this;
    initFileGroup(swfu);

    try
        {
            //alert(swfu.flash_url);
            var p = new FileProgress(file, swfu.settings.custom_settings.progressTarget, swfu);
            fg_fileSizes[swfu.settings.upload_type] += file.size;
            p.setShow(true);
    }
    catch (e)
        {
            this.debug(e);
    }
}

function fileDialogComplete()
{
    var swfu = this;
    initFileGroup(swfu);

    //0.3s = 0;
    //fg_uploads[swfu.settings.upload_type] = 0;
    fg_object[swfu.settings.upload_type] = new FileGroupProgress(swfu);
    fg_object[swfu.settings.upload_type].setFileCountSize(fg_fileSizes[swfu.settings.upload_type], swfu);
    fg_object[swfu.settings.upload_type].setUploadProgress(fg_uploads[swfu.settings.upload_type], fg_fileSizes[swfu.settings.upload_type]);

    if(swfu.getStats().files_queued > 0 && !!swfu.settings.custom_settings.is_click_upload){                
        swfu.settings.custom_settings.start_upload_obj.className = swfu.settings.custom_settings.start_upload_obj.className.replace(/hide/g,' ');
        swfu.settings.custom_settings.start_upload_obj.onclick = function(){
            swfu.startUpload();
        };
    }
    else{
        swfu.startUpload();        
    }
}

function fileQueueError(file, errorCode, message)
{
    var swfu = this;
    initFileGroup(swfu);

    try
    {
        if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED)
        {
            handleError("You have attempted to queue too many files.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file.")));
            return;
        }

        var progress = new FileProgress(file, swfu.settings.custom_settings.progressTarget, swfu);
        //progress.setError();
        progress.setShow(false);

        //fg_fileSizes[swfu.settings.upload_type] -= file.size;
        fg_object[swfu.settings.upload_type].setFileCountSize(fg_fileSizes[swfu.settings.upload_type], swfu);

        switch (errorCode)
        {
            case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
                //progress.setStatus("File is too big.");
                handleError("文件" + file.name + "大小超过限制!");
                this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                break;
            case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
                //progress.setStatus("Cannot upload Zero Byte files.");
                handleError("不能上传0节字文件" + file.name + "!");
                this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                break;
            case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
                //progress.setStatus("Invalid File Type.");
                handleError("文件" + file.name + "属于不允许上传的类型!");
                this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                break;
            default:
                if (file !== null)
                {
                    progress.setStatus("Unhandled Error");
                }
                handleError("文件" + file.name + "出现未知错误!");
                this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                break;
        }
    } catch (ex)
    {
        this.debug(ex);
    }
}

function uploadStart(file)
{
    var swfu = this;
    try
    {
        /* I don't want to do any file validation or anything,  I'll just update the UI and
        return true to indicate that the upload should start.
        It's important to update the UI here because in Linux no uploadProgress events are called. The best
        we can do is say we are uploading.
        */
        var progress = new FileProgress(file, swfu.settings.custom_settings.progressTarget, swfu);
        progress.setUploadState(3,this.settings);
        //progress.toggleCancel(true, swfu);
    }
    catch (ex) { }

    return true;
}

function uploadProgress(file, bytesLoaded, bytesTotal)
{
    var swfu = this;
    try
    {
        var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);

        var progress = new FileProgress(file, swfu.settings.custom_settings.progressTarget, swfu);
        //progress.setProgress(percent);
        progress.setProgress(percent);

        //fg_uploads[swfu.settings.upload_type] += bytesLoaded;

        fg_object[swfu.settings.upload_type].setUploadProgress(fg_uploads[swfu.settings.upload_type]+bytesLoaded, fg_fileSizes[swfu.settings.upload_type]);

    } catch (ex)
    {
        this.debug(ex);
    }
}

function uploadSuccess(file, serverData)
{
    var swfu = this;
    try
    {
        var progress = new FileProgress(file, swfu.settings.custom_settings.progressTarget, swfu);
        progress.setComplete(this.settings);
        fg_uploads[swfu.settings.upload_type] += file.size;
        //progress.setStatus("Complete.");
        //progress.toggleCancel(false,swfu);
        //swfu.startUpload();

        if(typeof swfu.settings.custom_settings.upload_success_handler == "function"){
            swfu.settings.custom_settings.upload_success_handler(file, serverData);
        }

    } catch (ex)
    {
        this.debug(ex);
    }
}

function uploadComplete(file)
{
    var swfu = this;
    try{
        //swf.stratUpload();
        
        if(!!swfu.settings.custom_settings.is_click_upload){
            swfu.settings.custom_settings.start_upload_obj.className += " hide";        
        }
    }
    catch (ex){
            this.debug(ex);
    }
}

function uploadError(file, errorCode, message)
{
    var swfu = this;
    try
    {
        var progress = new FileProgress(file, swfu.settings.custom_settings.progressTarget, swfu);
        progress.setShow(false);
        fg_fileSizes[swfu.settings.upload_type] -= file.size;
        fg_object[swfu.settings.upload_type].setFileCountSize(fg_fileSizes[swfu.settings.upload_type], swfu);

        switch (errorCode)
        {
            case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
                //progress.setStatus("Upload Error: " + message);
                handleError("Upload Error:" + message);
                this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
                break;
            case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
                //progress.setStatus("Upload Failed.");
                handleError("上传失败!");
                this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                break;
            case SWFUpload.UPLOAD_ERROR.IO_ERROR:
                //progress.setStatus("Server (IO) Error");
                handleError("服务器IO错误!");
                this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
                break;
            case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
                //progress.setStatus("Security Error");
                handleError("服务器安装错误!");
                this.debug("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
                break;
            case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
                //progress.setStatus("Upload limit exceeded.");
                handleError("上传被限制执行!");
                this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                break;
            case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
                //progress.setStatus("Failed Validation.  Upload skipped.");
                handleError("文件无效,跳过该文件!");
                this.debug("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                break;
            case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
                //progress.setStatus("Cancelled");
                //handleError("上传被终止!");
                //progress.setCancelled();
                break;
            case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
                //progress.setStatus("Stopped");
                //handleError("上传被停止!");
                break;
            default:
                //progress.setStatus("Unhandled Error: " + errorCode);
                handleError("未知异常,ErrorCode:" + errorCode);
                this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
                break;
        }
    } catch (ex)
    {
        this.debug(ex);
    }
}

// This event comes from the Queue Plugin
function queueComplete(numFilesUploaded)
{
    /*var status = document.getElementById("divStatus");
    status.innerHTML = numFilesUploaded + " file" + (numFilesUploaded === 1 ? "" : "s") + " uploaded.";*/
}